#ifndef GAMECOMMON_H
#define GAMECOMMON_H


#include "GlobalClass.h"



//控制台输出转向的一些通用信息
//多线程将 控制台输出 写入文件
class MessageHandlerInfo
{
private:
    MessageHandlerInfo();
    MessageHandlerInfo(const MessageHandlerInfo&){}

public:
    ~MessageHandlerInfo();

public:
    static MessageHandlerInfo* create();

    static void MessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg);

    //单例生产函数
    static void InstallMessageHandler()
    {
        m_fnQtMessageHandler = qInstallMessageHandler(MessageHandlerInfo::MessageHandler);
    }


public:
    //各个类型的输出 文件路径名称,如果为空,则不转向
    QString m_strInfoFile;
    QString m_strDebugFile;
    QString m_strWarningFile;
    QString m_strCriticalFile;
    QString m_strFatalFile;
    QString m_strOthersFile;

    //文件名格式
    QString m_strDatetimeFormat;


    //多线程写入类
    static FileWriteTask *m_pFileWriteTask;

    //原控制台输出指针
    static QtMessageHandler m_fnQtMessageHandler;

    //单例
    static MessageHandlerInfo *s_pMessageHandlerInfo;

};



#if defined(Q_OS_WIN32)   //win

#include <windows.h>
#include <dbghelp.h>
//异常捕获函数
LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException);

#endif



//QML写入MySQL的4个dataType(4个库)
//Info：1个类型（data_value）只能存储1个值data（json、Binary、Blob），比如数据
//Data：1个类型（data_value）可以存储多个data（json），比如聊天记录
//Binary最长为65512，Blob可以很大
class _Common: public QObject
{
    Q_OBJECT
    Q_ENUMS(NetDBDataType)
public:
    /*enum class NetDBDataType
    {
        DataType_JSon_Info = 1,
        DataType_JSon_Data,
        DataType_Binary_Info,
        DataType_Blob_Info,
    };*/

    enum NetDBDataType
    {
        DataType_JSon_Info = 1,
        DataType_JSon_Data,
        DataType_Binary_Info,
        DataType_Blob_Info,
        DataType_File_Info,
    };
};

/*
enum class NetDBDataType
{
    DataType_JSon_Info = 1,
    DataType_JSon_Data,
    DataType_Binary_Info,
    DataType_Blob_Info,
};*/


#endif // GAMECOMMON_H
